const CryptoJS = require('crypto-js')
const axios = require('axios')

module.exports = {
  // 每天的八点五分执行任务
  schedule: {
    cron: '0 5 8 * * *',
    type: 'worker',
  },
  async task(ctx) {
    // 基础参数
    const that = {
      /** 基础参数 */
      baseURI: 'https://app.tmuyun.com',
      /** 会话ID 不变 */
      XSESSIONID: '6791a471a95d5a6533fbb3b5',
      /** 账号ID 不变 */
      XACCOUNTID: '66c7e6da7dee051651c31a1c',

      /********************* 第一个接口 获取文章列表 *********************/
      /** article 接口 */
      url1: '/api/article/channel_list',
      /** article 接口 带参数 */
      urlParmas1: '/api/article/channel_list?channel_id=64632236e305b45f6263e773&isDiFangHao=false&is_new=true&list_count=0&size=20',
      article_list: [],
      /********************* 第二个接口 阅读 文章详情 接口 *********************/
      /** article detail 接口 */
      url2: '/api/article/detail',
      /********************* 第三个接口 点赞 接口 *********************/
      /** favorite like 接口 */
      url3: '/api/favorite/like',
      /********************* 第四个接口 分享 接口 *********************/
      /** user_munber doTask 接口 */
      url4: '/api/user_mumber/doTask',
      /********************* 第五个接口 评论 接口 *********************/
      /** comment create 接口 */
      url5: '/api/comment/create/v2',
    }

    // 生成guid
    const generateUUIDUsingMathRandom = () => {
      var d = new Date().getTime(); //Timestamp
      var d2 =
        (performance && performance.now && performance.now() * 1000) ||
        0; //Time in microseconds since page-load or 0 if unsupported
      return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
        /[xy]/g,
        function (c) {
          var r = Math.random() * 16; //random number between 0 and 16
          if (d > 0) {
            //Use timestamp until depleted
            r = (d + r) % 16 | 0;
            d = Math.floor(d / 16);
          } else {
            //Use microseconds since page-load if supported
            r = (d2 + r) % 16 | 0;
            d2 = Math.floor(d2 / 16);
          }
          return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);
        }
      );
    }

    // 处理headers
    const getPreHeaders = (url, XSESSIONID, XACCOUNTID) => {
      // 生成 guid
      let guid = generateUUIDUsingMathRandom()

      // 生成 timestamp
      let timestamp = Date.now()

      // 生成加密前字符串
      let preString = ("".concat(url, "&&").concat(XSESSIONID, "&&").concat(guid, "&&").concat(timestamp,
        "&&FR*r!isE5W&&").concat("82"))

      // sha256加密
      let sha256String = CryptoJS.SHA256(preString).toString();

      return {
        "X-REQUEST-ID": guid,
        "X-TIMESTAMP": timestamp,
        "X-SIGNATURE": sha256String,
        "X-SESSION-ID": XSESSIONID,
        "X-TENANT-ID": '82',
        "X-ACCOUNT-ID": XACCOUNTID
      }
    }

    // 文章
    const handleGetArticle = (XSESSIONID, XACCOUNTID) => {
      // 传入article 接口 处理headers
      const headers = getPreHeaders(that.url1, XSESSIONID, XACCOUNTID)
      // 传入article 接口 带参数
      axios.get(`${that.baseURI}${that.urlParmas1}`, {
          headers
        })
        .then(res => {
          res = res.data
          if (res.code == 0) {
            that.article_list = res.data.article_list

            that.article_list.map((item, key) => {
              setTimeout(() => {
                // 阅读
                const headers1 = getPreHeaders(that.url2, XSESSIONID, XACCOUNTID)
                item.isRead = false
                axios.get(`${that.baseURI}${that.url2}?id=${item.id}`, {
                    headers: headers1
                  })
                  .then(res => {
                    res = res.data
                    if (res.code == 0) {
                      item.isRead = true
                    }
                  })

                // 点赞
                const headers2 = getPreHeaders(that.url3, XSESSIONID, XACCOUNTID)
                item.isLiked = false
                axios.post(`${that.baseURI}${that.url3}`, `action=true&id=${item.id}`, {
                  headers: {
                    'content-type': 'application/x-www-form-urlencoded',
                    ...headers2
                  }
                }).then(res => {
                  res = res.data
                  if (res.code == 0) {
                    item.isLiked = true
                  }
                })

                // 分享
                const headers3 = getPreHeaders(that.url4, XSESSIONID, XACCOUNTID)
                item.isShared = false
                axios.post(`${that.baseURI}${that.url4}`, `memberType=3&member_type=3&target_id=${item.id}`, {
                  headers: {
                    'content-type': 'application/x-www-form-urlencoded',
                    ...headers3
                  }
                }).then(res => {
                  res = res.data
                  if (res.code == 0) {
                    item.isShared = true
                  }
                })

                // 评论
                // const headers4 = getPreHeaders(that.url5, XSESSIONID, XACCOUNTID)
                // item.isComment = false
                // axios.post(`${that.baseURI}${that.url5}`, {
                //   channel_article_id: item.id,
                //   content: "点赞"
                // }, {
                //   headers: headers4
                // }).then(res => {
                //   res = res.data
                //   if (res.code == 0) {
                //     item.isComment = true
                //   }
                // })
              }, Math.random() * key * 1000 * 30)
            })
          }
        })
        .catch(err => {})
    }


    const userArr = [
      // xch
      {
        /** 会话ID 不变 */
        XSESSIONID: '683623af7dee052f3e41733b',
        /** 账号ID 不变 */
        XACCOUNTID: '66c7e6da7dee051651c31a1c',
      },
      // lww
      {
        /** 会话ID 不变 */
        XSESSIONID: '678a65e6f34e16660aeb5f95',
        /** 账号ID 不变 */
        XACCOUNTID: '649a8bb581336f5315432ab4',
      }
    ]

    /**
     * 生成 x 和 y 之间的随机整数（包含 x 和 y 本身）
     * @param {number} x - 范围起始值（整数）
     * @param {number} y - 范围结束值（整数）
     * @returns {number} 随机整数
     */
    function getRandomIntegerBetween(x, y) {
      // 确保输入为整数（非整数则取整处理）
      const intX = Math.round(x);
      const intY = Math.round(y);

      // 确定最小值和最大值（处理 x > y 的情况）
      const min = Math.min(intX, intY);
      const max = Math.max(intX, intY);

      // 计算范围长度（包含两端值需要 +1）
      const range = max - min + 1;

      // 生成 [0, range) 的随机数 → 取整后 + min → 得到 [min, max] 之间的整数
      return Math.floor(Math.random() * range) + min;
    }

    for (let key in userArr) {
      const item = userArr[key]
      setTimeout(() => {
        handleGetArticle(item.XSESSIONID, item.XACCOUNTID)
      }, key * getRandomIntegerBetween(60, 120) * 1000)
    }
  },
};